package main

// $ go mod init github.com/zhangxi/jsonrpc_hello_client
// $ ==> go mod init jsonrpc_hello_client
// $ go mod tidy  #==> 下载项目中引入的第三方包,

// linux nc 启动一个服务端, $ nc -l 0.0.0.0 8080
// 本地 goclient 给 nc 发送数据,
// 数据是 {"method":"hello_service.SayHello","params":["zhangsan"],"id":0} ,
//

import (
	"fmt"
	"net"
	"net/rpc"
	"net/rpc/jsonrpc"
)

func main() {
	// 1. jsonrpc 用 net.Dial() 和 jsonrpc 微服务端建立连接,
	// 这里不再是 rpc.Dial("tcp", "10.4.7.17:8080"),
	conn, err1 := net.Dial("tcp", "127.0.0.1:8080")
	// conn, err1 := net.Dial("tcp", "10.4.7.17:8080")
	if err1 != nil {
		fmt.Println("rpc.Dial() err:", err1)
	}
	// 2.当客户端退出的时候关闭连接,
	defer conn.Close()
	// 3.建立基于 json 编解码的 rpc 服务,
	client := rpc.NewClientWithCodec(jsonrpc.NewClientCodec(conn))
	// 4.调用远程函数, 数据是 {"method":"hello_service.SayHello","params":["zhangsan"],"id":0} ,
	var reply string
	err2 := client.Call("hello_service.SayHello", "zhangsan", &reply)
	if err2 != nil {
		fmt.Println("client.Call() err:", err2)
		return
	}
	// 5.获取微服务返回的数据,
	fmt.Println(reply)
}
